home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / memvar.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  4KB  |  123 lines

  1.  
  2. /*    @(#)memvar.h 1.1 86/09/27 SMI    */
  3.  
  4. /*
  5.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  6.  */
  7.  
  8. /*
  9.  * A memory pixrect is a special type of pixrect.  Its image resides in
  10.  * memory, in a publicly known format permitting more direct access to the
  11.  * image than possible with the general pixrectops.
  12.  *
  13.  * In the memory pixrect the image is stored in consecutive
  14.  * memory locations, across the row from left to right, and then from top
  15.  * row to bottom.  Row boundaries come at shortword boundaries whence
  16.  * rows have an even number of bytes.
  17.  *
  18.  * The depth of a pixel is the number of bits required to represent it.
  19.  * Pixels are placed in consecutive fields of width the depth of each pixel,
  20.  * with placement being independent of word or byte boundaries.
  21.  */
  22. struct mpr_data {
  23.     int    md_linebytes;    /* number of bytes from one line to next */
  24.     short    *md_image;    /* word address */
  25.     struct    pr_pos md_offset;
  26.     short    md_primary;
  27.     short    md_flags;    /* Flag bits, see below */
  28. };
  29.  
  30. /*
  31.  * Bits from md_flags:
  32.  */
  33. /*                 Reverse video on this pixrect.  This bit
  34.  *                can only be on when MP_DISPLAY is on */
  35. #define MP_REVERSEVIDEO    1
  36. /*                This pixrect is a bw2 device, not plain mem */
  37. #define MP_DISPLAY    2
  38.  
  39. #define mpr_d(pr)                            \
  40.     ((struct mpr_data *)(pr)->pr_data)
  41. #define MPR_LINEBITPAD    16
  42.                 /* Each line (row) of the pixrect is padded
  43.                  *   to be a multiple of this many bits */
  44. #define    mpr_linebytes(x, depth)                        \
  45.     ( ((pr_product(x, depth) + (MPR_LINEBITPAD-1)) >> 3) &~ 1)
  46. #define mpr_prlinebytes(mpr)                        \
  47.     mpr_linebytes((mpr)->pr_size.x, (mpr)->pr_depth)
  48. #define    mpr_mdlinebytes(mpr)                        \
  49.     (mpr_d(mpr)->md_linebytes)
  50.  
  51. #define mprd_addr(mprd, xo, yo)                        \
  52.     ((short *)(                            \
  53.         (int)(mprd)->md_image                                       \
  54.         + pr_product((mprd)->md_linebytes,(mprd)->md_offset.y+(yo)) \
  55.         + (((mprd)->md_offset.x+(xo)) >> 3) &~ 1))
  56. #define mprd8_addr(mprd, xo, yo, d)                    \
  57.      ((u_char *)(                            \
  58.          (int)(mprd)->md_image                    \
  59.         + pr_product((mprd)->md_linebytes,(mprd)->md_offset.y+(yo)) \
  60.         + (pr_product((mprd)->md_offset.x+(xo), (d)) >> 3) )  )
  61.  
  62. #define    mprd_skew(mprd, xo, yo)                        \
  63.     (((mprd)->md_offset.x + (xo)) & 15)
  64. #define    mprs_addr(mprs)        _mprs_addr((struct pr_prpos *)&(mprs))
  65. #define    mprs8_addr(mprs)    _mprs8_addr((struct pr_prpos *)&(mprs))
  66. #define    mprs_skew(mprs)        _mprs_skew((struct pr_prpos *)&(mprs))
  67. short    *_mprs_addr();
  68. u_char    *_mprs8_addr();
  69. int    _mprs_skew();
  70.  
  71. /*
  72.  * Static pixrects.  A pixrect may be created at compile time using the
  73.  * mpr_static macro as part of the static declarations of a program.  Thus
  74.  * mpr_static(cursor, 16, 16, 1, rawcursordata);
  75.  * will declare and initialize (using rawcursordata) the storage needed
  76.  * for a pixrect that may be referred to as 'cursor' subsequently in the
  77.  * same file, or as &cursor if a pointer to that pixrect is called for rather
  78.  * than the pixrect itself.
  79.  */
  80.  
  81. /* First a pair of utility macros that allow concatenation in a fashion that
  82.  * won't annoy lint (These belong in a standard header file!):
  83.  */
  84.  
  85. #define IDENT(x)    x
  86. #define    CAT(a,b)    IDENT(a)b
  87.  
  88. #define mpr_static(name, w, h, d, image)                \
  89.     struct    mpr_data CAT(name,_data) =                \
  90.         {mpr_linebytes(w,d), (short *)(image), {0, 0}, 0, 0};    \
  91.     extern struct pixrectops mem_ops;                \
  92.     struct    pixrect name =                        \
  93.         {&mem_ops, w, h, d, (caddr_t)&CAT(name,_data)}
  94.  
  95. /*
  96.  * During rop calls need to determine if dst/src is something that
  97.  * mem_rop() can handle.  Use the following macro to find out.
  98.  */
  99. #define    MP_NOTMPR(pr)    ((pr)->pr_ops->pro_rop != mem_rop)
  100.  
  101. int    mem_rop();
  102. #ifndef KERNEL
  103. int    mem_stencil();
  104. int    mem_batchrop();
  105. struct    pixrect *mem_create();        /* General mpr create routine */
  106. struct    pixrect *mem_point();        /* Even more general mpr create */
  107. int    mem_destroy();
  108. int    mem_get();
  109. int    mem_put();
  110. int    mem_vector();
  111. struct    pixrect *mem_region();
  112. #endif KERNEL
  113. int    mem_putcolormap();
  114. int    mem_putattributes();
  115. #ifndef KERNEL
  116. int    mem_getcolormap();
  117. int    mem_getattributes();
  118. #endif KERNEL
  119.  
  120. #define    MEM_CODESIZE        50
  121. #define    MEM_CODESIZETOUNROLL    20
  122. extern int    (*mem_lrcode())(), (*mem_rlcode())();
  123.